事件监听器

应用事件监听器是实现一个或多个 Servlet 事件监听器接口的类。它们是在部署 Web 应用时,实例化并注册到 Web 容器中。它们由开发人员在WAR 包中提供。

Servlet 事件监听器支持在 ServletContext、HttpSession 和ServletRequest 状态改变时进行事件通知。Servlet 上下文监听器是用来管理应用的资源或 JVM 级别持有的状态。HTTP 会话监听器是用来管理从相同客户端或用户进入 web 应用的一系列请求关联的状态或资源。Servlet 请求监听器是用来管理整个 Servlet 请求生命周期的状态。异步监听器是用来管理异步事件,例如超时和完成异步处理。

可以有多个监听器类监听每一个事件类型,且开发人员可以为每一个事件类型指定容器调用监听器 bean 的顺序。

事件类型和监听器接口

事件类型和监听器接口用于监控下表所示的:

TABLE 11-1 Servlet Context Events

事件类型 描述 监听器接口
生命周期 Servlet上下文刚刚创建并可用于服务它的第一个请求,或者Servlet上下文即将关闭 javax.servlet.ServletContextListener
属性更改 在 Servlet 上下文的属性已添加、删除、或替换。 javax.servlet.ServletContextAttributeListener

TABLE 11-2 HTTP Session Events

事件类型 描述 监听器接口
生命周期 会话已创建、销毁或超时。 javax.servlet.http.HttpSessionListener
属性更改 已经在HttpSession上添加、移除、或替换属性 javax.servlet.http.HttpSessionAttributeListener
改变ID HttpSession 的 ID 将被改变 javax.servlet.http.HttpSessionIdListener
会话迁移 HttpSession 已被激活或钝化 javax.servlet.http.HttpSessionActivationListener
对象绑定 对象已经从HttpSession绑定或解除绑定 javax.servlet.http.HttpSessionBindingListener

TABLE 11-3 Servlet Request Events

事件类型 描述 监听器接口
生命周期 一个servlet请求已经开始由Web组件处理 javax.servlet.ServletRequestListener
更改属性 已经在ServletRequest上添加、移除、或替换属性。 javax.servlet.ServletRequestAttributeListener
异步事件 超时、连接终止或完成异步处理 javax.servlet.AsyncListener

监听器使用的一个例子

为了说明事件使用方案,考虑一个包含一些使用数据库的 Servlet 的简单 Web 应用。开发人员提供了一个 Servlet 上下文监听器类用于管理数据库连接。

  1. 当应用启动时,监听器类得到通知。应用登录到数据库,并在 servlet 上下文中存储连接。
  2. 应用中的 Servlet 根据需要,在 Web 应用的活动期间访问连接。
  3. 当 Web 服务器关闭时,或应用从 Web 服务器移除时,监听器类得到通知且关闭数据库连接。